#include "JProjectView.h"
#include "JLog.h"
#include "JProject.h"
#include <QMenu>

JProjectView::JProjectView(QWidget *parent, QAction* addSTL, QAction* addJTS, QAction* remove)
	: QTreeView(parent)
{
	setAnimated(true);
	setSelectionBehavior(QAbstractItemView::SelectItems);
	setIconSize(QSize(24,24));

	/*m_ItemModel = new QStandardItemModel(this);
	m_ProjectItem = m_ItemModel->invisibleRootItem();

	QStandardItem* item = new QStandardItem("Root Item");
	m_ProjectItem->appendRow(item);
	item->setEditable(false);
	m_ProjectItem = item;*/

	setModel(Project.itemModel());

	m_pAddSTL = addSTL;
	m_pAddJTS = addJTS;
	m_pRemove = remove;

	connect(this, SIGNAL(clicked(QModelIndex)), this, SLOT(updateIndex(QModelIndex)));

	setContextMenuPolicy(Qt::CustomContextMenu);
	connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(contextMenu(const QPoint &)) );
}

JProjectView::~JProjectView()
{

}

void JProjectView::updateIndex( QModelIndex index )
{
	Project.updateIndex(index);

	QStandardItem* item = Project.itemModel()->itemFromIndex(index);

	if (item->accessibleDescription().contains("Project"))
	{
		//m_pRemove->setEnabled(false);
		m_pAddSTL->setEnabled(true);
		m_pAddJTS->setEnabled(false);
	}
	else if (item->accessibleDescription().contains("STL"))
	{
		//m_pRemove
		m_pAddSTL->setEnabled(false);
		// check if jts exists already?
		m_pAddJTS->setEnabled(true);
	}
	else if (item->accessibleDescription().contains("JTS"))
	{
		//m_pRemove
		m_pAddJTS->setEnabled(false);
		m_pAddSTL->setEnabled(false);
	}
	else
	{
		//m_pRemove
		m_pAddJTS->setEnabled(true);
		m_pAddSTL->setEnabled(true);
	}
}

void JProjectView::contextMenu( const QPoint &pt )
{
	QMenu *ctxMenu = new QMenu;

	/*ctxMenu->addAction(tr("New "), this, SLOT(New()));
	ctxMenu->addAction(tr( "Add Model" ), this, SLOT( appendModel() ) );
	ctxMenu->addAction(tr( "Add JTS" ), this, SLOT( appendJTS() ) );
	ctxMenu->addAction(tr( "Remove "), this, SLOT( removeChild() ) );*/

	ctxMenu->addAction(m_pAddSTL);
	ctxMenu->addAction(m_pAddJTS);
	ctxMenu->addAction(m_pRemove);

	//QMenu *menu = new QMenu("Add",ctxMenu);
	//ctxMenu->addAction(menu->menuAction());
	//menu->addSeparator();

	//ctxMenu->addSeparator();

	ctxMenu->exec(this->mapToGlobal(pt));
}

//void JProjectView::appendChild()
//{
//	
//}
//
//void JProjectView::removeChild()
//{
//	QModelIndex index = selectionModel()->currentIndex();
//	m_ItemModel->removeRows(index.row(),1,index.parent());
//}
//
//void JProjectView::New()
//{
//	// clear current model
//	m_ItemModel->clear();
//	m_ProjectItem = m_ItemModel->invisibleRootItem();
//	// create the top level item with project name
//	QStandardItem* item = new QStandardItem("NewRootItem");
//	item->setEditable(false);
//	m_ProjectItem->appendRow(item);
//	m_ProjectItem = item;
//}
//
//void JProjectView::appendModel()
//{
//	//QModelIndex index = selectionModel()->currentIndex();
//	QIcon icon;
//	icon.addFile(QString::fromUtf8(":/JProject/Resources/Objects.png"));
//
//	static int temp = 0;
//
//	QStandardItem* item = new QStandardItem(icon, "Model");
//	item->setEditable(false);
//	item->setData("data = "+QString::number(temp++));
//	m_ProjectItem->appendRow(item);
//}
//
//void JProjectView::appendJTS()
//{
//	QModelIndex index = selectionModel()->currentIndex();
//	//Log.Post(QString::number(index.row())+" "+QString::number(index.column()));
//	QIcon icon;
//	icon.addFile(QString::fromUtf8(":/JProject/Resources/Spreadsheet.png"));
//
//	QStandardItem* item = new QStandardItem(icon, "JTS");
//	item->setEditable(false);
//	m_ItemModel->itemFromIndex(index)->appendRow(item);
//}